package com.bytz.modules.cms.order.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bytz.common.system.base.service.ICrudService;
import com.bytz.modules.cms.c4c.model.C4cGetContacts;
import com.bytz.modules.cms.c4c.model.C4cOpportunity;
import com.bytz.modules.cms.order.entity.Order;
import com.bytz.modules.cms.order.model.AdminOrderModel;
import com.bytz.modules.cms.order.model.OrderExcel;
import com.bytz.modules.cms.order.model.OrderItemAuditAssist;
import com.bytz.modules.cms.order.model.OrderItemExcel;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public interface IAdminOrderService extends ICrudService<Order, AdminOrderModel> {

    /**
     * 根据id查询
     */
    AdminOrderModel queryById(String id, boolean hasCostPriceView);


    /**
     * 获取model
     * @param id
     * @param hasCostPriceView
     * @return
     */
    public AdminOrderModel getOrderModel(String id, boolean hasCostPriceView);

    /**
     * 分页查询
     */
    IPage<AdminOrderModel> queryPage(Page<Order> page, QueryWrapper<Order> initQueryWrapper);

    /**
     * 导入历史订单
     */
    Boolean importHistory(List<OrderExcel> models, List<OrderItemExcel> items);

    /**
     * 导出订单
     */
    void export(QueryWrapper<Order> initQueryWrapper, HttpServletResponse response) throws IOException;

    /**
     * 上传盖章合同
     */
    void uploadContract(Order order);

    /**
     * 查询订单历史审批价格等信息
     */
    OrderItemAuditAssist productHistory(String orderId, String productNumber, String orderType);

    /**
     * 获取没有启动流程、没有生成过opportunity、已经预付的订单(需要自动生成opportunity的订单)
     */
    List<Order> getNoProcessPrepaidOrders();

    /**
     * 已预付 排产中 代提交尾款 已完成 并且没有创建报价单的则创建报价单
     */
    List<Order> getSalesQuoteOrders();

    /**
     * 根据订单信息创建opportunity，保存opportunity的id到订单表
     */
    void createOpportunity(Order order);



    /**
     * 获取机会id为空，sap订单id、sap报价id或c4c报价id不为空的订单信息
     */
    List<Order> getSystemStatusSyncList();

    /**
     * 根据订单的销售信息、需方信息查找对应的C4cOpportunity列表
     */
    List<C4cOpportunity> getOpportunities(String id);

    /**
     * 保存订单绑定的机会id和机会objectId
     */
    Boolean bindOpportunity(Order order);

    /**
     * e-chop回调，标记为莱宝已盖章
     */
    Boolean setEChopSignComplete(String id, String documentId, String status);

    /**
     * 终止订单
     */
    Boolean terminate(String id);

}